home *** CD-ROM | disk | FTP | other *** search
/ Cubase Magazine 32 / Issue #32.iso / 3-TUTORIAL / TRIANTI / convoluzione / wavereader.h < prev    next >
C/C++ Source or Header  |  2001-02-18  |  2KB  |  77 lines

  1. #ifndef __inc_WaveReader__
  2. #define __inc_WaveReader__
  3.  
  4. /* Costanti che identificano i vari chunk */
  5. #define RIFF_CHUNK ('R' | 'I' << 8 | 'F' << 16 | 'F' << 24)
  6. #define DATA_CHUNK ('d' | 'a' << 8 | 't' << 16 | 'a' << 24)
  7. #define FMT__CHUNK ('f' | 'm' << 8 | 't' << 16 | ' ' << 24)
  8. #define TYPE_WAVE  ('W' | 'A' << 8 | 'V' << 16 | 'E' << 24)
  9.  
  10. /* Formati wave non compressi */
  11. #define WAVE_FORMAT_PCM     1
  12. #define WAVE_FORMAT_FLOAT   3
  13.  
  14. struct WaveFormat
  15. {
  16.     unsigned short wFormatTag;         /* Tipo di file (1 = PCM, 3 = floating point PCM) */
  17.     unsigned short nChannels;          /* numero di canali */
  18.     unsigned long  nSamplesPerSec;     /* sample rate */
  19.     unsigned long  nAvgBytesPerSec;    /* flusso di dati in bytes al secondo */
  20.     unsigned short nBlockAlign;        /* allineamento tra campioni */
  21.     unsigned short wBitsPerSample;     /* bit per campione (es. 8, 16, 20, 24...) */    
  22. } typedef WaveFormat;
  23.  
  24. struct RiffChunk
  25. {
  26.     unsigned long  id;  /* identificatore del chunk. Il primo deve essere RIFF_CHUNK */
  27.     unsigned long  cbSize; /* dimensione in byte dei dati appartenenti al chunk */
  28. } typedef RiffChunk;
  29.  
  30. struct ChunkInfo
  31. {
  32.     RiffChunk chunk; /* il chunk vero e proprio */
  33.     unsigned long offset; /* l'esatta posizione nel file dell'inizio dei dati
  34.                              del chunk */
  35. } typedef ChunkInfo;
  36.  
  37.  
  38. struct WaveFileDirect
  39. {
  40.  
  41.     FILE* file;
  42.     
  43.     int sampleRate;
  44.     int nChannels;
  45.     int bitPerSample;
  46.     int cbBlockAlign;
  47.  
  48.     int nSamples;    
  49.     int pcmDataOffset;
  50.     int nSamplePosition;
  51.  
  52. } typedef WaveFileDirect;
  53.  
  54. struct WaveFileWriter
  55. {
  56.     FILE* file;
  57.     
  58.     int sampleRate;
  59.     int nChannels;
  60.     
  61.     int nSamples;    
  62. } typedef WaveFileWriter;
  63.  
  64. /* Scrittura file wave */
  65. WaveFileWriter* WFW_CreaWave (char *nome_file, int sr, int canali);
  66. int WFW_Scrivi (WaveFileWriter *wfw, float* buffer, int samples);
  67. int WFW_Chiudi (WaveFileWriter* wfw);
  68.  
  69. /* Lettura file wave */
  70. WaveFileDirect* WFD_ApriWave (char *nome_file);
  71. int WFD_Posiziona (WaveFileDirect *wfd, int numeroCampione);
  72. int WFD_Leggi (WaveFileDirect *wfd, float *buffer, int numeroCampioni);
  73. int WFD_LeggiCampione (WaveFileDirect *wfd, float* buffer);
  74. int WFD_Chiudi (WaveFileDirect *wfd);
  75.  
  76. #
  77. #endif